<?php
/************************************************************************************************
 * 																								*
 * Autor: Dariusz Janik																			*
 * Data utworzenia: 14.11.2012																	*
 * Data ostatniej modyfikacji: 5.12.2012														*
 * 																								*
 * Klasy: Formularz - klasa służy do generowania kodu html formularza do edycji/dodawania 		*
 * 				elementów drzew. Posiada możliwość sprawdzania poprawności wpisanych danych.	*
 * 																								*
 * Korzysta z obiektów klas: Uzytkownik_class													*
 * 																								*
 * Lokalizacja pliku: klasy/formularz.php														*
 * 																								*
 ************************************************************************************************/

require_once 'uzytkownik_class.php';

class Formularz
{
	private $typ;
	private $action;
	private $okTekst;
	private $anulujHref;
	private $post;
	private $os1;
	private $tekst1;
	private $os2;
	private $tekst2;
	private $minRok;
	private $maxRok;
	private $domyslnyRok;
	private $istWezly;		//tablica istniejacych wezłów
	private $czyZdjecie;
	
	public function setMinRok($minRok) { $this->minRok=$minRok; }
	public function setMaxRok($maxRok) { $this->maxRok=$maxRok; }
	public function setDomyslnyRok($domyslnyRok) { $this->domyslnyRok=$domyslnyRok; }
	
	//typ: 0-jeden formularz, 1-dwa formularze
	public function __construct($typ, $action, $okTekst, $anulujHref, $post, $osoba1, $tekst1, $osoba2=null, $tekst2=null, $istWezly=null, $czyZdjecie=false)
	{
		$this->typ=$typ;
		$this->action=$action;
		$this->okTekst=$okTekst;
		$this->anulujHref=$anulujHref;
		$this->post=$post;
		$this->os1=$osoba1;
		$this->tekst1=$tekst1;
		$this->os2=$osoba2;
		$this->tekst2=$tekst2;
		$this->istWezly=$istWezly;
		$this->czyZdjecie=$czyZdjecie;
		$this->minRok=1900;
		$this->maxRok=date('Y', time());
		$this->domyslnyRok=null;
	}
	
	//zwraca osobę lub tablicę osób na podstawie danych post lub false jeśli nastąpi błąd (zawiera walidację)
	public function zwrocOsobe()
	{
		if($this->post!=null && $this->waliduj()===true)
		{
			if($this->typ==0) $il=1;
			else if($this->typ==1) $il=2;
			
			$osoby=array();
			
			for($i=0; $i<$il; $i++)
			{
				if($this->typ==0) $numer='';
				else if($this->typ==1) $numer=$i+1;
				
				$imie = $this->post['imie'.$numer];											//imie
				$nazwisko = $this->post['nazwisko'.$numer];									//nazwisko
				$plec=$this->post['plec'.$numer];											//płeć

				$dzienu = $this->post['dzien_urodzenia'.$numer];							//pobieranie daty urodzenia
				$miesiacu = $this->post['miesiac_urodzenia'.$numer];
				$roku = $this->post['rok_urodzenia'.$numer];
				$data_urodzenia=date_format(new DateTime($roku.'-'.$miesiacu.'-'.$dzienu), 'Y-m-d H:i:s');

				$dziens = $this->post['dzien_smierci'.$numer];								//pobieranie daty śmierci
				$miesiacs = $this->post['miesiac_smierci'.$numer];
				$roks = $this->post['rok_smierci'.$numer];
				
				if($dziens==0 && $miesiacs==0 && $roks==0)
					$data_smierci=null;
				else 
				{
					$data_smierci=date_format(new DateTime($roks.'-'.$miesiacs.'-'.$dziens), 'Y-m-d H:i:s');
				}
					
						
				if(strlen($this->post['nazwisko_panienskie'.$numer])<1)						//nazwisko panieńskie
					$nazwisko_panienskie=null;
				else
					$nazwisko_panienskie = $this->post['nazwisko_panienskie'.$numer];
				
				if(strlen($this->post['notatka'.$numer])<1)									//notatka
					$notatka=null;
				else 
					$notatka = $this->post['notatka'.$numer];
				
					
				$os=new Osoba(-1, $imie, $nazwisko, $data_urodzenia, $data_smierci, $plec, null, $notatka, $nazwisko_panienskie);
				
				if($this->typ==0)
					return $os;
				else if($this->typ==1)
					$osoby[]=$os;
			}
			return $osoby;
		}
		else
			return false;
	}
	
	//gdy formularz jest poprawny to zwraca true, w przeciwnym przypadku HTML z błędami
	public function waliduj()
	{
		$bledy='';
		$poprawny=true;
		if($this->typ==0) $il=1;
		else if($this->typ==1) $il=2;
		
		for($i=0; $i<$il; $i++)
		{
			if($this->typ==0) $numer='';
			else if($this->typ==1) $numer=$i+1;
			if($i==0)	$te=$this->tekst1;
			else if($i==1)	$te=$this->tekst2;
			
			if(!isset($this->post['imie'.$numer]) || strlen(trim($this->post['imie'.$numer]))<1)
			{
				$poprawny = false;
				$bledy.= '<p class="blad">'.$te.': Należy wpisać imię.</p>';
			}
			if(!isset($this->post['nazwisko'.$numer]) || strlen(trim($this->post['nazwisko'.$numer]))<1)
			{
				$poprawny = false;
				$bledy.= '<p class="blad">'.$te.': Należy wpisać Nazwisko.</p>';
			}
			if(!isset($this->post['plec'.$numer]))
			{
				$poprawny = false;
				$bledy.= '<p class="blad">'.$te.': Należy wybrać płeć.</p>';
			}
			$dds=$this->post['dzien_smierci'.$numer];
			$dms=$this->post['miesiac_smierci'.$numer];
			$drs=$this->post['rok_smierci'.$numer];
			if(!($dds==0 && $dms==0 && $drs==0)	&& !($dds!=0 && $dms!=0 && $drs!=0))				//jeżeli jeden lub dwa parametry są różne od zera
			{																			//dzień, miesiąc i rok muszą być podane wszystkie lub wszystkie==0
				$poprawny = false;
				$bledy.= '<p class="blad">'.$te.': Data śmierci musi być podana w całości albo wcale.</p>';
			}
		}
		
		if($poprawny)
			return true;
		else
			return $bledy;
	}
	
	//zwraca kod HTML formularza na podstawie danych podanych w konstruktorze
	public function generujFormularz()
	{
		$user=new Uzytkownik_class();
		if($user->CzyAdmin())
			$this->minRok=$this->minRok-20;
		$w='<div id="register_form" class="table-bordered" >';
		if($this->czyZdjecie && $this->os1!==null)
		{
			$w.=$this->zdjecie($this->os1->getId());
		}
		$w.='<form method="post" action="';
		$w.=$this->action;
		$w.='">';
		
		if($this->istWezly!==null)
		{
			$w.=$this->selectIstniejace();
		}
		
		
		if($this->typ==0)
			$w.=$this->tworzFieldset($this->os1, $this->tekst1);
		if($this->typ==1)
		{
			$w.=$this->tworzFieldset($this->os1, $this->tekst1, 1);
			$w.=$this->tworzFieldset($this->os2, $this->tekst2, 2);
		}
			
		
		$w.='<input type="submit" name="wyslij" value="';
		$w.=$this->okTekst;
		$w.='" />  
			 <a class="przycisk" href="';
		$w.=$this->anulujHref;
		$w.='">Anuluj</a>
				</form>
				</div>';
		
		return $w;
	}
	
	private function zdjecie($id_osoba)
	{
		$w='';
		$w.='<form enctype="multipart/form-data"  method="POST" action="?tree&form=edytujWezel&id='.$id_osoba.'">
		<fieldset>
		<legend>Zdjęcie</legend>';
		$sciezka = 'obrazki/'. $id_osoba .'.jpeg';
		if(file_exists($sciezka))
			$w.='<img width ="100px" height="100px" src="'.$sciezka .'"/>';
		else
			$w.='<img src="obrazki/miniaturka.png"/>';
		$w.='<!-- MAX_FILE_SIZE must precede the file input field -->
				<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
				<!-- Name of input element determines name in $_FILES array -->
				<label>Załaduj zdjęcie: </label><input name="plik" type="file" />
				<input type="submit" name="zaladuj_zdjecie" value="Załaduj zdjęcie"/>
			</fieldset>
		</form>';
		
		return $w;
	}
	
	private function selectIstniejace()
	{
		$w='';
		if($this->istWezly!==null && !empty($this->istWezly))
		{
			$w.='<div><input type="radio" name="tryb" value="1" /><label>Istniejące: </label>';
			
			$w.='<select name="id">';
			foreach ($this->istWezly as $iwe)
			{
				$imie=$iwe->getOsoba()->getImie();
				$nazwisko=$iwe->getOsoba()->getNazwisko();
				$data=$iwe->getOsoba()->getDataUrodzenia();
				$w.='<option value="'.$iwe->getId().'">'.$imie.' '.$nazwisko.' '.$data.'</option>';
			}
			$w.='</select></div>';
			
			$w.='<input checked type="radio" name="tryb" value="2" /><label>Nowe: </label>';
		}
		
		return $w;
	}
	
	private function tworzFieldset($osoba, $tekst, $numer='')
	{
		if($this->post!=null)
		{
			$imie=$this->post['imie'.$numer];
			$nazwisko=$this->post['nazwisko'.$numer];
			if(isset($this->post['plec'.$numer]))	$plec=($this->post['plec'.$numer] == 0) ? false : true;
			$nazwiskoPanienskie=$this->post['nazwisko_panienskie'.$numer];
			$notatka=$this->post['notatka'.$numer];
		}
		else 
		{
			if($osoba!==null)
			{
				if($osoba->getImie()!=null)	$imie=$osoba->getImie();
				if($osoba->getNazwisko()!=null)	$nazwisko=$osoba->getNazwisko();
				if($osoba->getPlec()!==null)	$plec=$osoba->getPlec();
				if($osoba->getNazwPanien()!=null)	$nazwiskoPanienskie=$osoba->getNazwPanien();
				if($osoba->getNotatka()!=null)	$notatka=$osoba->getNotatka();
			}
		}
		if($osoba!==null && $osoba->getPlec()!==null)
		{
			$blokujPlec=true;
			$user=new Uzytkownik_class();
			if($user->CzyAdmin())	$blokujPlec=false;
		}
			
		else $blokujPlec=false;
		
		
		
		
		$w='<fieldset>
			<legend>';
		$w.=$tekst;
		$w.='</legend>';

		//Imie
		$w.='<label>Imię*</label><input type="text" name="imie'.$numer.'" value="';
		if(isset($imie))	$w.=$imie;
		$w.='" placeholder="Imię"/>';	
		
		//Nazwisko
		$w.='<label>Nazwisko*</label><input type="text" name="nazwisko'.$numer.'" value="';
		if(isset($nazwisko))	$w.=$nazwisko;
		$w.='" placeholder="Nazwisko"/>';

		//Płeć
		$w.='<p>Płeć*
			<label for="pleck'.$numer.'">Kobieta</label><input class="toggler" id="pleck'.$numer.'" type="radio" name="plec'.$numer.'"';
		if(isset($plec) && !$plec)	$w.=' checked ';
		else if($blokujPlec)	$w.=' disabled="disabled" ';
		
		$w.=' value="0"/>
			<label for="plecm'.$numer.'">Mężczyzna</label><input class="toggler" id="plecm'.$numer.'" type="radio" name="plec'.$numer.'"';
		if(isset($plec) && $plec)	$w.=' checked ';
		else if($blokujPlec)	$w.=' disabled="disabled" ';
		
		$w.=' value="1"/>';
		$w.='</p>';

		//Nazwisko panieńskie
		$w.='<div id="plec'.$numer.'"><label>Nazwisko panieńskie</label><input type="text" name="nazwisko_panienskie'.$numer.'" value="';
		if(isset($nazwiskoPanienskie))	$w.=$nazwiskoPanienskie;
		$w.='" placeholder="Nazwisko panieńskie"/></div>';
		
		
		//Data urodzenia
		if($osoba!==null) $du=$osoba->getDUint(); else $du=null;
		$w.=$this->tworzDate($du, "Data urodzenia*", "urodzenia", $numer, true);
		
		//Data śmierci
		if($osoba!==null) $ds=$osoba->getDSint(); else $ds=null;
		$w.=$this->tworzDate($ds, "Data śmierci", "smierci", $numer, false);
		
		//Notatka
		$w.='<label>Notatka</label> ';
		$w.='<textarea rows="8" name="notatka'.$numer.'" >';
		if(isset($notatka))	$w.=$notatka;
		$w.='</textarea>';
		
		$w.='</fieldset>';
		
		return $w;
	}
	
	private function tworzDate($data, $tekst, $czego, $numer='', $wymagane=true)
	{
		$p=$wymagane ? 1 : 0;									//jeśli nie wymagane to dodaj wartość pustą o indeksie 0
		$w='';
		
		if($this->post!=null)
		{
			if(isset($this->post['dzien_'.$czego.$numer]))	$dzien=$this->post['dzien_'.$czego.$numer];
			if(isset($this->post['miesiac_'.$czego.$numer]))	$miesiac=$this->post['miesiac_'.$czego.$numer];
			if(isset($this->post['rok_'.$czego.$numer]))	$rok=$this->post['rok_'.$czego.$numer];
		}
		else
		{
			if($data!==null)
			{
				$dzien=date_format(new DateTime($data), 'j');
				$miesiac=date_format(new DateTime($data), 'n');
				$rok=date_format(new DateTime($data), 'Y');
				
			}
			else if($this->domyslnyRok!==null && $wymagane)
				$rok=$this->domyslnyRok;
		}
		if($data!==null && $wymagane)
		{
			$user=new Uzytkownik_class();
			if($user->CzyAdmin())	
				$blokujDate=false;
			else 
			{
				$blokujDate=true;
				if(isset($dzien))	$w.='<input type="hidden" name="dzien_'.$czego.$numer.'" value="'.$dzien.'">';
				if(isset($miesiac))	$w.='<input type="hidden" name="miesiac_'.$czego.$numer.'" value="'.$miesiac.'">';
				if(isset($rok))	$w.='<input type="hidden" name="rok_'.$czego.$numer.'" value="'.$rok.'">';
			}
		}
		else $blokujDate=false;
		
		$w.='<label>'.$tekst.'</label>
			<p>';
		
		
		$w.='Dzień
			<select name="dzien_'.$czego.$numer.'" ';
		if($blokujDate)	$w.='disabled="disabled"';
		$w.=' >';
		for ($i=$p; $i<=31; $i++)
		{
			$w.='<option ';
			if(isset($dzien) && $dzien==$i)	$w.='selected="selected"';
			$w.=' value="'.$i.'">'.($i==0 ? '' : $i).'</option>';
		}
		$w.='</select>';
		
		
		$w.='Miesiąc
			<select name="miesiac_'.$czego.$numer.'" ';
		if($blokujDate)	$w.='disabled="disabled"';
		$w.=' >';
		for ($i=$p; $i<=12; $i++)
		{
			$w.='<option ';
			if(isset($miesiac) && $miesiac==$i)	$w.='selected="selected"';
			$w.=' value="'.$i.'">'.($i==0 ? '' : $i).'</option>';
		}
		$w.='</select>';
		
		
		$w.='Rok
			<select name="rok_'.$czego.$numer.'" ';
		if($blokujDate)	$w.='disabled="disabled"';
		$w.=' >';
		if(!$wymagane)
		{
			if(isset($rok) && $rok==0)
				$w.='<option selected="selected" value="0"></option>';
			else 
				$w.='<option value="0"></option>';
		}
		$niewymMax=$this->maxRok+100 > date('Y', time()) ? date('Y', time()) : $this->maxRok+100;	//max data śmierci: maxRok+100 jeśli nie większe niż bieżący rok
		for ($i=( $wymagane ? $this->maxRok : $niewymMax ); $i>=$this->minRok; $i--)
		{
			$w.='<option ';
			if(isset($rok) && $rok==$i)	$w.='selected="selected"';
			$w.=' value="'.$i.'">'.$i.'</option>';
		}
		$w.='</select>';
		
		$w.='</p>';

		return $w;	
	}
	
}

?>